def findval(vals,parents,childs,i,arr):
l1 = [i]
l2 = []
while l1 != []:
xx = l1.pop()
l2.append(xx)
for ii in childs[xx]:
l1.append(ii)
while l2 != []:
xx = l2.pop()
if childs[xx] == []:
arr[xx] = vals[xx]
else:
minchildval = 1e9
for j in childs[xx]:
minchildval = min(minchildval,arr[j])
if vals[xx] < minchildval:
arr[xx] = (vals[xx]+minchildval)//2
else:
arr[xx] = minchildval
return arr[i]
def findminvalfr(vals,parents,childs):
x = 1e9
arr = [-1 for i in range(len(vals))]
for i in childs[0]:
x = min(x,findval(vals,parents,childs,i,arr))
return x
num = int(input())
out = []
for x in range(num):
n = int(input())
vals = [int(i) for i in input().split()]
parents = [-1] + [int(i)-1 for i in input().split()]
childs = []
for i in range(n):
childs.append([])
for i in range(1,n):
childs[parents[i]].append(i)
if childs[0] == []:
out.append(vals[0])
continue
minfr = findminvalfr(vals,parents,childs)
out.append(vals[0]+minfr)
for i in out:
print(int(i))
973. K Closest Points to Origin | 969. Pancake Sorting |
967. Numbers With Same Consecutive Differences | 957. Prison Cells After N Days |
946. Validate Stack Sequences | 921. Minimum Add to Make Parentheses Valid |
881. Boats to Save People | 497. Random Point in Non-overlapping Rectangles |
528. Random Pick with Weight | 470. Implement Rand10() Using Rand7() |
866. Prime Palindrome | 1516A - Tit for Tat |
622. Design Circular Queue | 814. Binary Tree Pruning |
791. Custom Sort String | 787. Cheapest Flights Within K Stops |
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |